// src/router/routes.tsx
import { FC, lazy } from 'react';

// 定义路由类型
export interface RouteType {
    path: string;
    Component: ReturnType<typeof lazy>;
    exact?: boolean;
    roles?: string[];
}

// 动态导入 pages 目录下的所有页面组件
const pages = import.meta.glob<{ default: FC }>('../pages/**/*.tsx', { eager: false });

// 生成路由配置
export const generateRoutes = (): RouteType[] => {
    return (Object.entries(pages) as [string, () => Promise<{ default: FC }>][])
        .map(([filePath, importFn]) => {
            const nameMatch = filePath.match(/\.\.\/pages\/(.*?)\.tsx$/);
            if (!nameMatch) return null;

            const compMatch = filePath.match(/\.\.\/pages\/(.*?)\/components\/(.*?)\.tsx$/);
            if (compMatch) return null;

            let name = nameMatch[1];
            // 处理动态路由参数
            let routePath = name
                .replace(/\[\.\.\.(\w+)\]/g, ':$1*') // 处理 [...param]
                .replace(/\[(\w+)\]/g, ':$1') // 处理 [param]
                .toLowerCase();

            // 处理 index 路由（例如：pages/Users/index.tsx → /users）
            routePath = routePath.replace(/\/index$/, '') || '/';

            // 根据文件路径推断路由配置
            const isExact = !routePath.includes(':'); // 精确匹配没有参数的路由

            return {
                path: routePath,
                Component: lazy(importFn),
                exact: isExact,
            };
        })
        .filter((route) => route !== null);
};